针对有序数据集合的查找算法
1000 万个整数数据,每个数据占 8 个字节,如何设计数据结构和算法,快速判断某个整数是否出现在这 1000 万数据中?
该功能不要占用太多的内存空间,最多不要超过 100MB。
二分思想
O(logn) 惊人的查找速度
二分查找的递归与非递归实现
最简单的情况就是有序数组中不存在重复元素。
循环条件:low<=high
mid取值:
low 和 high 比较大的话,mid=(low+high)/2和可能会溢出。
改进方式1为,mid=low+(high-low)/2
改进方式2为,除以 2 操作转化成位运算 mid = low+((high-low)>>1)
low和high更新
low=mid+1,high=mid-1
1 | # 循环二分查找 |